<?php
class tree extends CI_Controls{
	
	/* 
	$tree= new tree();
	$tree->animated=true; 		// efectos de javascript, apertura/cierre | defecto: true
	$tree->parentLink=true; 	// si el elemento padre llevará enlace, si no hara el efecto de expandir/contraer | defecto: true
	$tree->tree=$treeNav; 		// el tree con la estructura de arriba
	$tree->allCollapsed=true;	// indica si empieza colapsado | defecto: true
	$tree->id='id_apartado';	// indica el campo identificador del nodo del arbol
	$tree->texto='nombre';		// indica el campo que se mostrará
	$tree->enlace='enlace';		// indica el campo que contiene la direccion del enlace
	$tree->currentLink=true;	// indica si debe verificar la url actual con la url de cada nodo y añadirle las clases de seleccionado
	$tree->currentMode='start';	// indica el modo de verificar la url actual, modes:['start'|'equal'|'both'] | defecto : 'equal'
	*/
	
	public $tree= array();
	public $id;
	public $texto;
	public $enlace;
	public $animated=true;
	public $parentLink=false;
	public $allCollapsed=true;
	public $currentItem;
	public $currentMode='equal';
	
	
	
	function __construct(){
		parent::__construct();
	}
	
	function drawContent(){
		static $level=0;
		
		$nav= new nav();
		$nav->atributos=$this->heredarAtributos();
		$nav->att('uid',$this->uid);
		$nav->att('style','display:none;');
		$nav->addControl($this->buildTree($this->tree));
		$this->treeScript();
		return $nav;
	}
	
	private function buildTree($tree){
		static $level=1;

		$ul= new ul();
		$ul->atributos=$this->heredarAtributos('_tree tree');
		$ul->att('level',$level);

		foreach ($tree as $elemento) {
			$tipo='final';
			$parent=false;
			if(!empty($elemento->children)){
				$tipo='parent';
				$parent=true;
			}
			$li= new li();
			$li->atributos=$this->heredarAtributos('_item tree_item level'.$level.' '.$tipo);
			$li->att('level',$level);
			$li->att('idTree',$elemento->{$this->id});
			
				$item_row= new div();
				$item_row->atributos=$this->heredarAtributos('_item_row tree_item_row '.$tipo);
			
					$icon= new span();
					$icon->atributos=$this->heredarAtributos('_item_icon tree_item_icon '.$tipo);
					
					$text= new div();
					$text->atributos=$this->heredarAtributos('_item_content tree_item_content '.$tipo);
	
						if(!($parent && !$this->parentLink) && !empty($this->enlace) && !empty($elemento->{$this->enlace})){
							$enlace= new anchor();
							$enlace->atributos=$this->heredarAtributos('_link tree_item_link');
							$enlace->att('href',$elemento->{$this->enlace});
							$enlace->value=$elemento->{$this->texto};
							$text->addControl($enlace);
						} else {
							$text->value=$elemento->{$this->texto};
						}
				
				$item_row->addControl($icon);
				$item_row->addControl($text);
						
			$li->addControl($item_row);
			
			if($parent){
				++$level;
				$newUl=$this->buildTree($elemento->children);
				$li->addControl($newUl);
				$level--;
			}
			$ul->addControl($li);
		}
		return $ul;
	}
	
	private function treeScript(){
	
		ob_start(); ?>
			<script>

				$(function(){

				    var tree=$('#<?php echo $this->att('id')?>[uid="<?php echo $this->uid; ?>"]');

				    //tree.hide();

				    tree.find('li.tree_item>ul.tree').hide();


				    var parentsLi=tree.find('li.tree_item:has(ul.tree)').addClass('closed');
				    var childrenLi=tree.find('li.tree_item:not(:has(ul.tree))');

				    //si se quiere decir desde codigo la indentacion
				    //$('li>ul').css('padding-left','20px');


				    //ie hack para last-child
				    $('ul>li:last-child').css('margin-bottom','0');
				    
				    parentsLi.each(function(){
				        
				        var li=$(this);
				        
				        li.find('div.tree_item_content:first , span.tree_item_icon:first').click(function(){
				            li.toggleClass('opened').toggleClass('closed');
				            li.find('ul.tree:first').slideToggle('fast');
				        });   
				    });
				    
				    //abre el menu con etiqueta <a href> que coincide con el enlace de la web
				    <?php if(!$this->currentItem){ ?>
					    var mode='';
						var pathname=window.location.pathname.split('?')[0];
						var href=window.location.href.split('?')[0];
					    <?php if ($this->currentMode=='start') {?>
							mode='^';
							pathname=pathname.substring(0, pathname.lastIndexOf('/'));
							href=href.substring(0, href.lastIndexOf('/'));
					    <?php 
							} ?>
							tree.find('a[href'+mode+'="'+pathname+'"]').parents('li.tree_item').addClass('selected').children('div.tree_item_content').addClass('selected').click().prev('span.tree_item_icon').addClass('selected');
						    tree.find('a[href'+mode+'="'+href+'"]').parents('li.tree_item').addClass('selected').children('div.tree_item_content').addClass('selected').click().prev('span.tree_item_icon').addClass('selected');					
						<?php
					} else {
						?>
						tree.find('li.tree_item[idtree=<?php echo $this->currentItem; ?>] > div > div > a').parents('li.tree_item').addClass('selected').children('div.tree_item_row').children('div.tree_item_content').addClass('selected').click().prev('span.tree_item_icon').addClass('selected');
					<?php 
					}
					?>

				    tree.show();

				});
			</script>
			<?php 
			$this->CI->dynamic_assets->add_code_js(ob_get_clean());	
	}
}